﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="LogMessageConditionXmlHandler.cs" company="Silverseed.de">
//    (c) 2010 Markus Hastreiter @ Silverseed.de
//
//   Licensed under the Apache License, Version 2.0 (the "License");
//   you may not use this file except in compliance with the License.
//   You may obtain a copy of the License at
//
//       http://www.apache.org/licenses/LICENSE-2.0
//
//   Unless required by applicable law or agreed to in writing, software
//   distributed under the License is distributed on an "AS IS" BASIS,
//   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
//   See the License for the specific language governing permissions and
//   limitations under the License.
// </copyright>
// --------------------------------------------------------------------------------------------------------------------

namespace Silverseed.RepoCop.Xml
{
  using System;
  using System.Collections.Generic;
  using System.Text.RegularExpressions;

  internal class LogMessageConditionXmlHandler : ConditionXmlHandler<LogMessageCondition>
  {
    protected override LogMessageCondition CreateCondition(Dictionary<string, string> attributes)
    {
      string logMessageRegExPattern;
      attributes.TryGetValue("LogMessageRegExPattern", out logMessageRegExPattern);

      RegexOptions regexOptions = RegexOptions.Compiled;
      string regexOptionsText;
      if (attributes.TryGetValue("RegExOptions", out regexOptionsText))
      {
        foreach (var regexOptionText in regexOptionsText.Split('+'))
        {
          // do we need try..catch here?
          var regExOption = (RegexOptions)Enum.Parse(typeof(RegexOptions), regexOptionText, true);
          regexOptions |= regExOption;
        }
      }
      
      return new LogMessageCondition(logMessageRegExPattern, regexOptions);
    }
  }
}
